<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Demo-17-生命周期</title>
    <script type="text/javascript" src="../JS/vue.js"></script>
</head>
<body>
<div id="root">
    <!-- 常用的生命周期钩子:
        1. mounted: 发送 AJAX 请求、启动定时器、绑定自定义事件、订阅消息等初始化操作
        2. beforeDestroy: 清除定时器、解绑自定义事件、取消订阅等收尾工作

        关于销毁 Vue 实例:
        1. 销毁后借助 Vue 开发者工具看不到任何消息
        2. 销毁后自定义事件会失效, 但是原生 DOM 事件依旧有效
        3. 一般不会在 beforeDestroy 操作数据, 因为即使操作了数据, 也不会触发更新流程 -->
    <h3 :style="{opacity}">Hello World!</h3>

    <button @click="destroy()">点我停止变换</button>
</div>

<script text="text/javascript">
    const vm = new Vue({
        el: '#root',

        data: {
            opacity: 1,
        },

        methods: {
            destroy() {
                // clearInterval(this.timer)
                this.$destroy()
            }
        },

        // Vue 完成模板的解析并把初始的真实 DOM 元素放入页面后(挂载完毕)调用 mounted
        mounted() {
            this.timer = setInterval(() => {
                this.opacity -= 0.05
                if (this.opacity <= 0) {
                    this.opacity = 1
                }
            }, 50)
        },

        beforeDestroy() {
            clearInterval(this.timer)
        }
    })

</script>
</body>
</html>